package com.mashibing.bio.tomcat;

import com.mashibing.bio.tomcat.http.MyMapping;
import com.mashibing.bio.tomcat.http.MyRequest;
import com.mashibing.bio.tomcat.http.MyResponse;
import com.mashibing.bio.tomcat.servlet.MyServlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Author: JLL
 * @Date: 2019/10/26 18:21
 *
 * 这个tomcat一样跑的起来，映射关系可以 不从配置文件里读，而是直接写死在内存里
 *
 *  已启动server就BIO死循环监听在一个端口上
 *  拿到inputstream 封装成request、 最后调用service方法
 */
public class MyServer {


    public static void main(String[] args) {
        try {
            startServer(10086);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    public static void startServer(int port) throws IOException {
        ServerSocket serverSocket = new ServerSocket(port);

        Socket socket = null;
        while (true){

            socket = serverSocket.accept();


            OutputStream outputStream = socket.getOutputStream();
            InputStream inputStream = socket.getInputStream();

            /**
             * 想到servlet 九大内置对象。request都有哪些功能。
             * 首先它得 存请求url ，请求类型吧， http报文里面的信息肯定都要存下来。
             */
            MyRequest myRequest = new MyRequest(inputStream);


            //拿到request的url，和get 开始匹配具体servlet了。
            //怎么匹配??  肯定有一个统一存放的地方，管理了所有的url。那这个东西肯定是初始化的时候扫描并缓存起来的。
            //一般这种kv形式的可以写在xml里，然后缓存到map里。所以map的性能很重要
            //k肯定是url，v是什么呢？   就是servlet了。那servlet的管理肯定是 接口-》抽象类-》具体类这种方式了

            //我们假设内存里已经有了



        }




    }


}
